package com.example.park2301a.notice

import androidx.lifecycle.viewModelScope
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import androidx.paging.cachedIn
import com.example.base.entity.NoticeBeanItem
import com.example.base.mvvm.BaseViewModel
import com.example.base.net.ApiService
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

// 使用Hilt注解标记此ViewModel类，以便于使用Hilt进行依赖注入
@HiltViewModel
// NoticeViewModel类构造函数中的apiService参数将通过 Dagger-Hilt进行注入
class NoticeViewModel @Inject constructor(val apiService: ApiService) : BaseViewModel(){

    /**
     * 获取通知列表数据
     *
     * 此函数使用分页查询方式获取数据，配置每页大小为10条记录
     * 数据源由NoticeDataSource提供，它负责实际的数据加载和处理
     *
     * @return 返回一个Flow流，包含分页的通知数据
     */
    fun getNotices(): Flow<PagingData<NoticeBeanItem>> {
        // 创建并返回一个Pager对象的Flow流，该对象用于处理分页数据
        return Pager(config = PagingConfig(pageSize = 10), pagingSourceFactory = {
            NoticeDataSource(apiService)
        }).flow.cachedIn(viewModelScope)
    }
}
